草庐IT

c++ - SIMD C++ 库

全部标签

c++ - 在 C 接口(interface)中使用 shared_ptr?

我有一个要移植到C++的C库,它大量使用手动引用计数结构。我考虑过使用shared_ptr来自动处理引用计数,但我还想维护CAPI。旧签名看起来像这样:Object*object_create(void);Object*object_retain(Object*o);voidobject_release(Object*o);如果我使用shared_ptr,有什么方法可以有效地在CAPI中公开此手动引用计数? 最佳答案 shared_ptr的问题,正如您已经发现的那样,您不能修改引用计数,除非通过构造或销毁实例。所以不,除了为每个构造

c++ - 如何在 C 库的实现文件中使用 C++ STL 容器?

假设我希望在我希望C程序链接到的库的实现中使用C++STL容器...我的示例header是/*mynums.h*/#ifndefMY_NUMS#defineMY_NUMS#ifdef__cplusplusextern"C"{#endifvoidappend_num(intnum);voidprint_nums();#ifdef__cplusplus}#endif#endif我的示例实现文件是/*mynums.cpp*/#include"mynums.h"#includeusingstd::vector;vectornums;voidappend_num(intnum){nums.pus

c++ - 链接器错误:对 `std::ctype<char>::_M_widen_init() 的 undefined reference

我在尝试运行示例项目时遇到链接器错误。你能告诉我如何解决这个问题吗?提前致谢。make[1]:Enteringdirectory`/home/rumi/MobiusProject/Multiproc-Paper/Transformer/ssg'/usr/bin/g++-w-DMOBIUS_LITTLE_ENDIAN-DMOBIUS_LINUX-m32-ossgGen_Linux-L../../lib/Linux_lib/-L/home/rumi/Mobius/mobius/Mobius-2.3/Cpp/lib/Linux_lib-L/home/rumi/Mobius/mobius/Mo

c++ - 我可以从遗留 C 回调中抛出 C++ 异常吗?

我的C++代码使用了一些C库。C库采用C语言回调。我在我的C++代码中写了一个回调,现在我需要以某种方式报告它的错误(但它返回无效)。我想知道是否可以从C++代码中使用的C回调中抛出异常?这对我来说很难理解。谢谢,BodaCydo。 最佳答案 是的,你应该能够这样做。但是,请记住C库很可能不是为异常安全而编写的,因此您可能会使该库的某些结构处于某种不一致的状态。这完全取决于特定的库和特定的回调函数。如果不出意外,该库可能必须从一开始就考虑到该回调的C++支持。 关于c++-我可以从遗留C

c++ - C/C++ 编译器能否通过 pthread 库调用合法地将变量缓存在寄存器中?

假设我们有以下代码:#include#include#includevoidguarantee(boolcond,constchar*msg){if(!cond){fprintf(stderr,"%s",msg);exit(1);}}booldo_shutdown=false;//Notvolatile!pthread_cond_tshutdown_cond=PTHREAD_COND_INITIALIZER;pthread_mutex_tshutdown_cond_mutex=PTHREAD_MUTEX_INITIALIZER;/*CalledinThread1.Intendedbeh

c++ - 优化稳定的恒定时间数组比较

(注意:“恒定时间”是指当其中一个输入固定时机器周期的数量是恒定的,而不是O(1)。这是该术语在密码学上下文中的标准含义。)将一个固定值与一个相同大小的未知值进行比较的最常见方法是使用XOR循环:boolcompare(constchar*fixed,constchar*unknown,size_tn){charc=0;for(size_ti=0;iGCC4.6.3和CLANG3.0不会在AMD64上短路此循环,即使在-O3时也是如此(我检查了生成的机器代码)。但是,我不知道C标准中有什么会阻止一些聪明的编译器识别如果c永远不为零,那么该函数只能返回false.如果您愿意接受较大的性能

c++ - 用 C 编写的 DLL 与用 C++ 编写的相同

今天我和一位同事进行了讨论。他声称用C编写DLL将允许任何其他应用程序,无论是用什么语言编写的,都可以使用该DLL。但是,如果该DLL是用C++编写的,则可以使用该DLL的应用程序数量是有限的(可能是因为语言限制)。他说的对吗?如果您要编写一个DLL,供以各种语言编写的各种应用程序使用(但在同一平台上;让我们暂时忘记可移植性),您会用C/C++编写它吗?为什么?我希望这个问题不是Gorillavs.Shark有点问题。如果是,请关闭它。 最佳答案 大多数语言都提供了一种(简单的)方法来从DLL调用C函数。C++不是这种情况,因为C+

c++ - 在不修改源代码的情况下将库函数标记为已弃用/不可用

我有一个大型代码库,其中使用了一些不安全的函数,例如gmtime和strtok。我不想尝试搜索代码库并批量替换这些代码,而是想让编译器在看到它们时发出警告或错误(以向维护开发人员突出显示问题)。GCC可以吗?我已经知道__attribute__((deprecated)),但我无法使用它,因为我无法控制声明这些函数的头文件。 最佳答案 创建自定义headerdeprecated.h。在那里,创建您自己的包装函数,deprecated_strtok()等等,它们只会调用strtok。用__attribute__((deprecated

c++ - 是否有用于 C 或 C++ 的跨平台 gzip 处理器库?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我想要一些库(API)来打开、查找、读取、写入...(一言以蔽之处理)gzip文件。有没有针对C或C++的开源跨平台的?

c++ - 有什么理由不从可执行文件中删除符号吗?

几年前我问过aquestion如何减少可执行文件的大小。使用MinGW编译器,剥离符号(-s选项)有助于减少50%以上的大小。为什么剥离不是默认的——在某些情况下为什么不剥离符号有什么好的理由吗?我想更深入地理解它:今天,我只是模糊地知道链接库涉及符号。可执行文件中是否需要它们?它们是否会影响执行速度? 最佳答案 我无法想象它们会以任何明显的方式影响执行速度,但理论上,进程镜像中可能会有微小的缓存未命中。您希望在调试文件时将符号保留在文件中,以便您可以看到您在哪个函数中,检查变量的值等等。但是符号会使文件变大:可能会变大很多。因此,